package com.cskaoyan.javase.oop1._10static._0old;

/**
 * static关键字
 * 练习：
 * 	创建一个学生类，用来描述我们班全体同学，要求
 * 		属性：姓名，性别，年龄，学号，学校信息
 * 		行为：吃饭，学习
 * 接下来开始创建对象,需要使用构造器.
 *
 * 在创建对象时,我们发现学校信息的属性,所有对象都是一样的,那么可不可以改进一下?
 *
 * 显然，我们会发现以下问题：
 * 1. 无论创建多少Student对象，由于该类描述的是我们班全体同学，他们的班级信息实际上是一样的
 * 2. 创建多次对象，需要重复的给一个属性赋相同的值，这是很麻烦的，不方便的。
 * 3. **学校信息这个属性实质上应该是被全体同学所共有的属性，而不是独属于某个对象的。**
 *
 * 所以，按照我们以往定义成员变量的方法来完成这个案例，是可以改进的。
 *
 * 1. 可以把成员变量schoolName中直接显式赋值为“王道训练营”或者直接写死构造方法
 *    - 这样确实可以实现功能，但是没有从根本上解决问题，问题3依然存在
 *    - 学校信息这个属性在每一个对象当中都存在，有点浪费内存空间
 *    - 最重要的，我们在设计类的时候其实已经知道这个属性，是全体对象都有，不应该属于某个对象。
 *
 * -我们希望这个属性不是属于某一个对象的，而是一种类的特征，是属于类的，属于全体对象所共享的.
 * 以往我们讲的成员变量是属于对象的,现在我们希望有一种被全体对象共享,
 *      属于类的成员变量,这就是static修饰的静态成员变量,也可以简称"静态变量,类变量"
 *
 *
 * @since 14:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {

    public static void main(String[] args) {
        Student s1 = new Student("张三", 18, "王道训练营");
        Student s2 = new Student("李四", 28, "王道训练营");
        Student s3 = new Student("王二", 19, "王道训练营");
        Student s4 = new Student("麻子", 30, "王道训练营");
    }

}

class Student {
    // 属性
    String name;
    String gender;
    int age;
    int id;
    String schoolName = "王道训练营";

    // 行为
    public void eat() {
        System.out.println("我爱吃饭!");
    }

    public void study() {
        System.out.println("我爱学习!");
    }

    // 构造器 alt + insert


    public Student() {
    }

    public Student(String name, int age, String schoolName) {
        this.name = name;
        this.age = age;
        this.schoolName = schoolName;
    }
}
